// import com.alibaba.druid.DbType;
// import com.alibaba.druid.sql.ast.SQLExpr_ptr;
// import com.alibaba.druid.sql.ast.SQLObject_ptr;
// import com.alibaba.druid.sql.ast.statement.SQLAssignItem;
// import com.alibaba.druid.sql.ast.statement.SQLCreateTableStatement;
// import com.alibaba.druid.sql.visitor.SQLASTVisitor;

// import java.util.ArrayList;
// import java.util.LinkedHashMap;
// import java.util.List;
// import java.util.Map;
#pragma once
#include "../../../../utils/common_ptr.h"
#include "../../../ast/statement/SQLCreateTableStatement.h"

class HiveCreateTableStatement : public SQLCreateTableStatement
{
public:
  SQLExpr_list_ptr skewedBy;
  SQLExpr_list_ptr skewedByOn;
  std::shared_ptr<std::map<std::string, SQLObject_ptr>> serdeProperties;
  SQLExpr_ptr metaLifeCycle;

  BOOL_ptr likeQuery; // for DLA

  SQLAssignItem_list_ptr mappedBy;
  SQLExpr_ptr intoBuckets;
  SQLExpr_ptr using_;

  HiveCreateTableStatement();

  HiveCreateTableStatement(DbType_ptr dbType);
  SHAREDOBJECT(HiveCreateTableStatement);

  void accept0(SQLASTVisitor_ptr v);

  void acceptChild(SQLASTVisitor_ptr v);

  void cloneTo(HiveCreateTableStatement_ptr x);

  SQLObject_ptr clone();

  SQLExpr_list_ptr getSkewedBy();

  void addSkewedBy(SQLExpr_ptr item);

  SQLExpr_list_ptr getSkewedByOn();

  void addSkewedByOn(SQLExpr_ptr item);

  std::shared_ptr<std::map<std::string, SQLObject_ptr>> getSerdeProperties();

  SQLExpr_ptr getMetaLifeCycle();

  void setMetaLifeCycle(SQLExpr_ptr x);

  BOOL_ptr isLikeQuery();

  void setLikeQuery(BOOL_ptr likeQuery);

  SQLAssignItem_list_ptr getMappedBy();

  SQLExpr_ptr getIntoBuckets();

  void setIntoBuckets(SQLExpr_ptr intoBuckets);

  SQLExpr_ptr getUsing();

  void setUsing(SQLExpr_ptr x);
};
